package vip.aster.workflow.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import vip.aster.workflow.dto.*;
import vip.aster.workflow.entity.DataColum;

import java.util.List;
import java.util.Map;

/**
 * 数据库操作Mapper
 */
@Mapper
public interface DataSourceMapper {

    /**
     * 执行sql
     *
     * @param sql sql语句
     */
    void execute(String sql);

    /**
     * 查询数据列信息
     *
     * @param columnDto 查询条件
     * @return 数据库表列信息
     */
    List<DataColum> listColumn(ColumnDto columnDto);

    /**
     * 添加数据列
     *
     * @param addColumnDto 添加数据列信息
     */
    void addVarcharColumn(AddColumnDto addColumnDto);

    /**
     * 批量新增列信息
     *
     * @param batchAddColumnDto 列集合
     */
    void batchAddColumnList(BatchAddColumnDto batchAddColumnDto);

    /**
     * 修改数据列
     *
     * @param updateColumnDto 修改数据列信息
     */
    void updateVarcharColumn(UpdateColumnDto updateColumnDto);

    /**
     * 批量修改列信息
     *
     * @param batchAddColumnDto 列集合
     */
    void batchUpdateColumn(BatchAddColumnDto batchAddColumnDto);

    /**
     * 保存
     *
     * @param dynamicData 动态表和数据
     * @return 成功或失败
     */
    int save(DynamicDataDto dynamicData);

    /**
     * 修改
     *
     * @param dynamicData 动态表和数据
     * @return 成功或失败
     */
    int update(DynamicDataDto dynamicData);

    /**
     * 动态分页查询数据
     *
     * @param page  分页条件
     * @param query 查询条件
     * @return 表单数据
     */
    @MapKey("id")
    IPage<Map<String, Object>> selectPage(@Param("page") IPage<Map<String, Object>> page, @Param("query") DynamicDataDto query);

    /**
     * 查询动态数据
     *
     * @param dynamicData 查询条件
     * @return 数据集合
     */
    @MapKey("id")
    List<Map<String, Object>> select(DynamicDataDto dynamicData);

}
